Flash non-volatile storage devices are commonly used in computers as high-speed solid state storage devices. These devices require flash memory controllers that typically work as random write/random read, small data block devices. Their data block size is typically 8-16 KB. Since these devices provide random write/random read data traffic, performance requirements limit the amount of error correction and data protection that may be used without reducing performance.
Further, these flash controllers require a small block flash translation layer (FTL) which is a mapping of host based small blocks into pages within the flash memory device. Flash translation layers are typically complex and create additional processes for the flash controller to manage such as garbage collection, management of a very large translation table, wear leveling, power fail recovery, and the like. Because of these requirements, flash translation layers are expensive in terms of area and power within the flash controller, and also reduce performance and increase wear.
Overview
In an embodiment, a storage controller for a storage system is provided. The storage controller includes a host interface, configured to receive host data for storage within the storage system, a storage interface, configured to transmit storage data to the storage system, and processing circuitry coupled with the host interface and the storage interface. The processing circuitry is configured to receive a request from a partition creator, for a first partition within the storage system, the first partition comprising one or more sequentially numbered data blocks, and to receive first partition parameters from the partition creator, the first partition parameters comprising a size of the one or more sequentially numbered data blocks.
The processing circuitry is also configured to create the first partition within the storage system, through the storage interface, based on the first partition parameters, receive first host data from a host, configure the first host data as first storage data for storage within the first partition, and to sequentially store the first storage data in the one or more sequentially numbered data blocks in the first partition, through the storage interface.
In another embodiment, a method of operating a storage controller is provided. The method includes receiving a request from a partition creator, for a first partition within a storage system, the first partition comprising one or more sequentially numbered data blocks, and receiving first partition parameters from the partition creator, the first partition parameters comprising a size of the one or more sequentially numbered data blocks.
The method also includes creating the first partition within the storage system, through a storage interface, based on the first partition parameters, receiving first host data from a host, configuring the first host data a first storage data for storage within the first partition within the storage system, and sequentially storing the first storage data in the one or more sequentially numbered data blocks in the first partition, through the storage interface.
In a further embodiment, one or more non-transitory computer-readable media having stored thereon program instructions to operate a storage controller for a storage system are provided. The program instructions, when executed by processing circuitry, direct the processing circuitry to at least receive a request from a partition creator, for a first partition within the storage system, the first partition comprising one or more sequentially numbered data blocks, and to receive first partition parameters from the partition creator, the first partition parameters comprising a size of the one or more sequentially numbered data blocks.
The programming instructions further direct the processing circuitry to at least create the first partition within the storage system, through a storage interface, based on the first partition parameters, receive first host data from a host, configure the first host data as first storage data for storage within the first partition, and to sequentially store the first storage data in the one or more sequentially numbered data blocks in the first partition, through the storage interface.